package cn.rocky.offer;

/**
 * @version 1.0
 * @description  求 1+2+...+n ，
 * @author viki
 * @date 2021/8/2 11:45
 */
public class Offer64 {

    /**
     * 数字和的方法: 要求不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句（A?B:C）。
     * 1.方法1:递归
     * 2.快乘法
     * @param n
     * @return
     */
    public static int sumNums(int n) {
        boolean flag = n > 0 && (n += sumNums(n - 1)) > 0;
        return n;
    }

    public static int sumNums1(int n) {
        int ans = 0;
        int A = n;
        int B = n + 1;
        boolean flag;
        flag = ((B & 1) > 0) && (ans += A) > 0;
        A <<= 1;
        B >>= 1;
        flag = ((B & 1) > 0) && (ans += A) > 0;
        A <<= 1;
        B >>= 1;
        flag = ((B & 1) > 0) && (ans += A) > 0;
        A <<= 1;
        B >>= 1;
        flag = ((B & 1) > 0) && (ans += A) > 0;
        A <<= 1;
        B >>= 1;
        flag = ((B & 1) > 0) && (ans += A) > 0;
        A <<= 1;
        B >>= 1;
        flag = ((B & 1) > 0) && (ans += A) > 0;
        A <<= 1;
        B >>= 1;
        flag = ((B & 1) > 0) && (ans += A) > 0;
        A <<= 1;
        B >>= 1;
        flag = ((B & 1) > 0) && (ans += A) > 0;
        A <<= 1;
        B >>= 1;
        flag = ((B & 1) > 0) && (ans += A) > 0;
        A <<= 1;
        B >>= 1;
        flag = ((B & 1) > 0) && (ans += A) > 0;
        A <<= 1;
        B >>= 1;
        return ans >>1;
    }

    public static void main(String[] args) {
        // 15--> 1111
        // 10--> 1010
        // 6 --> 0110
        // 5 --> 0101
        // 4 --> 0100
        // 3 --> 0011
        // 2 --> 0010
        // 1 --> 0001
        int n = 999;
        int i = sumNums(n);
        int j = sumNums1(999);
        System.out.println(i);
        System.out.println(j);
    }
}
